Cloudflare WorkersでRuby via WebAssemblyを動かそうと調べた
WASMとかWASIとか
RubyをWASIファイルに変換する
3.2.0からWASIベースのWebAssemblyへのコンパイルがサポートされた。
wasi-vfsというのが必要らしい。これは何...ファイルシステム?
つまり実行したいスクリプトも埋め込んじゃって、ワンバイナリでWasmのCRubyでアプリケーションを配布 できてしまうということ。
Macで実行するためのHomebrewが用意されてた。
code:sh
brew install kateinoigakukun/wasi-vfs/wasi-vfs
WasmerというWASMを実行できるランタイムをダウンロード。今回はRubyで作成したWASMアプリを実行するのに使う。 code:sh
ruby.wasmをダウンロードして展開し作成
code:sh
tar xfz ruby-3_2-wasm32-unknown-wasi-full.tar.gz
mv 3_2-wasm32-unknown-wasi-full/usr/local/bin/ruby ruby.wasm
Rubyのコードを書く。
code:sh
mkdir src
vim hello.rb
code:hello.rb
time = Time.now.strftime('%Y-%m-%d %H:%M:%S')
Rubyと上で書いたコードをそれぞれvfsの/usrと/srcに配置してパッケージング
code:sh
wasi-vfs pack ruby.wasm --mapdir /src::./src --mapdir /usr::./3_2-wasm32-unknown-wasi-full/usr -o hello.wasm
実行
code:sh
wasmer hello.wasm -- /src/hello.rb
生成されたWASMファイルは16MBもある!!!Workerのアップロード制限は1MBなので無理!!!
リンク